/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Seguridad.Controlador;

import CharliesCookies.MainController;
import CharliesCookies.MainMenuGUI;
import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Seguridad.Vista.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.dp1.pucp.Modelo.Clases.Usuario;
import com.dp1.pucp.Util.Validaciones;
import java.util.Date;

public class RestablecerPassControlador {

    private RestablecerPassGUI restablecerPassView;
    private Usuario usuario;

    public RestablecerPassControlador(RestablecerPassGUI vista, String nomUsuario) {

        restablecerPassView = vista;
        restablecerPassView.setUsuario(nomUsuario);
        restablecerPassView.addAceptarListener(new aceptarListener());
        restablecerPassView.addCancelarListener(new cancelarListener());
        restablecerPassView.setVisible(true);

    }

    class aceptarListener implements ActionListener {

        UsuarioDAO userDAO = new UsuarioDAO();
        Usuario usuario;
        LoginDAO loginDAO = new LoginDAO();

        @Override
        public void actionPerformed(ActionEvent e) {


            if (restablecerPassView.getUsuario().compareToIgnoreCase("") == 0) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Usuario");
                return;
            }

            if (restablecerPassView.getPass().compareToIgnoreCase("") == 0) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Contraseña Actual");
                return;
            }

            if (restablecerPassView.getNuevaPass().compareToIgnoreCase("") == 0) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Nueva Contraseña");
            }

            if (restablecerPassView.getNuevaPass().compareToIgnoreCase(restablecerPassView.getConfirmPass()) != 0) {
                Validaciones.mostrarMensajeErrorVal("Las contraseñas no coinciden\nFavor de corregir.");
                restablecerPassView.limpiarNuevoPass();
                restablecerPassView.limpiarConfirmPass();
                return;
            }

            usuario = loginDAO.validarUsuario(restablecerPassView.getUsuario());

            if (usuario.getIdusuario() == 0) {
                Validaciones.mostrarMensajeErrorVal("El Usuario no Existe");
                return;
            }

            if (usuario.getContrasenaAnterior() != null) {
                if (usuario.getContrasenaAnterior().compareToIgnoreCase(restablecerPassView.getConfirmPass()) == 0) {
                    Validaciones.mostrarMensajeErrorVal("Esta contraseña ya se utilizó");
                    restablecerPassView.limpiarNuevoPass();
                    restablecerPassView.limpiarConfirmPass();
                    return;
                }
            }

            String pass = new String();

            if (restablecerPassView.getPass().startsWith("11111")) {
                pass = restablecerPassView.getPass();
            } else {
                pass = UsuarioDAO.getStringMessageDigest(restablecerPassView.getPass());
            }

            if (pass.compareToIgnoreCase(usuario.getContrasena()) != 0) {
                Validaciones.mostrarMensajeErrorVal("Contraseña Actual Incorrecta");
                return;
            }

            usuario.setContrasenaAnterior(usuario.getContrasena());
            usuario.setContrasena(UsuarioDAO.getStringMessageDigest(restablecerPassView.getConfirmPass()));
            usuario.setUltimaModificacion(new Date());
            usuario.setUltimaFechaIngreso(new Date());
            userDAO.guardarUsuario(usuario);
            Validaciones.mostrarMensajeAvisoVal("La contraseña se cambió exitosamente!!");

            MainMenuGUI CharliesCookies = new MainMenuGUI();
            MainController controller = new MainController(CharliesCookies, usuario);
            restablecerPassView.dispose();
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;
            salida = Validaciones.solicitarConfirmacionSalida("restablecer contraseña");
            if (salida == 0) {
                restablecerPassView.dispose();
                LoginGUI login = new LoginGUI();
                LoginDAO usr = new LoginDAO();
                LoginControlador c = new LoginControlador(usr, login);
                login.setVisible(true);
            }
        }
    }
}
